﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using TheBullysStore.Models.ModuloServicios.QuejasySugerencias;
using log4net;
using TheBullysStore.Models;

namespace TheBullysStore.Controllers.ModuloServicio
{
    public class QuejasySugerenciasController : Controller
    {
        //
        // GET: /QuejasySugerencias/
        private static ILog log = LogManager.GetLogger(typeof(QuejasySugerenciasController));
        private TheBullysStoreDB db = new TheBullysStoreDB();
        EdificioFacade edificioFacade = new EdificioFacade();
        QuejasySugerenciasFacade quejasySugerenciasFacade = new QuejasySugerenciasFacade();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult QuejasySugerencias()
        {
            return View();
        }

        public ActionResult RegistrarQuejasySugerencias()
        {
            return View();
        }

        public ActionResult BuscarQuejasySugerencias()
        {
            return View();
        }

        [HttpPost]
        public JsonResult cargarEdificios(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> ListaEdificio = edificioFacade.Listaredificio(edificio);

                return Json(new { ListaEdificio });
            }
            catch (Exception ex)
            {
                log.Error("CargarEdificios - GET(EXCEPTION):", ex);
                return Json(new { listaEdificio = "Ocurrió un error al cargar los edificios" });
            }
        }

        [HttpPost]
        public JsonResult registrarQuejasySugerencias(QuejasySugerenciasBean quejaySugerencias)
        {
            try
            {
                string Conexion = quejasySugerenciasFacade.RegistrarQuejasySugerencias(quejaySugerencias);
                if (Conexion == "Bien")
                {
                    log.Warn("La Queja: \"" + quejaySugerencias.IdQuejas + "\"ya ha sido creada");
                    return Json(new { me = "Se ingreso correctamente" });
                }
                else
                {
                    log.Error("registrarQuejasySugerencias - Hubo un error");
                    return Json(new { me = Conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("registrarQuejasySugerencias - GET(EXCEPTION):", ex);
                return Json(new { me = "Existe un error" });
            }
            
        }

        [HttpPost]
        public JsonResult buscarQuejasySugerencias(QuejasySugerenciasBean quejaySugerencias)
        {
            try
            {
                List<QuejasySugerenciasBean> ListaQuejasySugerencias = quejasySugerenciasFacade.ListarQuejasySugerencias(quejaySugerencias);

                return Json(new { ListaQuejasySugerencias });
            }
            catch (Exception ex)
            {
                log.Error("buscarQuejasySugerencias - GET(EXCEPTION):", ex);
                return Json(new { ListaQuejasySugerencias = "Ocurrió un error al buscar" });
            }
        }

        [HttpPost]
        public JsonResult modificarQuejaySugerencia(QuejasySugerenciasBean quejaySugerencias)
        {
            try
            {
                string Conexion = quejasySugerenciasFacade.modificarQuejaySugerencia(quejaySugerencias);
                if (Conexion == "Bien")
                {
                    return Json(new { me = "Se ingreso correctamente" });

                }
                else
                {
                    log.Error("modificarQuejaySugerencia - Hubo un error");
                    return Json(new { me = "Existe un error" });

                }
            }
            catch (Exception ex)
            {
                log.Error("modificarQuejaySugerencia - GET(EXCEPTION):", ex);
                return Json(new { me = "Existe un error" });
            }
        }
        [HttpPost]
        public JsonResult eliminarQuejaySugerencia(QuejasySugerenciasBean quejaySugerencias)
        {
            try
            {
                string Conexion = quejasySugerenciasFacade.EliminarQuejaySugerencia(quejaySugerencias);
                if (Conexion == "Bien")
                {
                    //enviarMail(quejaySugerencias);
                    return Json(new { me = "Se elimino correctamente" });
                }
                else
                {
                    log.Error("Eliminar Queja/Sugerencias - Hubo un error");
                    return Json(new { me = Conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("Eliminar Queja/Sugerencias - GET(EXCEPTION):", ex);
                return Json(new { me = "Existe un error" });
            }
        }

        [HttpPost]
        public JsonResult enviarMail(QuejasySugerenciasBean quejasySugerencias)
        {
            try
            {         
                String message = "";
                message += quejasySugerencias.Mensaje;
                System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential("sw.softbully@gmail.com", "Himerror500Softbully");

                QuejasySugerenciasBean datosUsuario  = quejasySugerenciasFacade.BuscarDatos(quejasySugerencias);
                if (datosUsuario.IdPersona != 0)
                {
                    mail.To.Add(datosUsuario.Mail);
                    if (quejasySugerencias.Tipo == 2)
                    { mail.Subject = "SUGERENCIA REVISADA"; }
                    else { mail.Subject = "QUEJA REVISADA"; }

                    mail.From = new System.Net.Mail.MailAddress("sw.softbully-NO-REPLY@gmail.com");
                    mail.IsBodyHtml = true;
                    mail.Body = message;

                    System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com");
                    smtp.UseDefaultCredentials = false;
                    smtp.EnableSsl = true;
                    smtp.Credentials = cred;
                    smtp.Port = 587;
                    smtp.Send(mail);
                    log.Warn("Se envio la queja/sugerencia: \"" + quejasySugerencias.IdQuejas + "\"");
                    return Json(new { me = "Se envio correctamente" });
                }
                else {
                    log.Warn("La queja/sugerencia es anonima");
                    return Json(new { me = "La queja/sugerencia es anonima" }); 
                }
            }
            catch (Exception ex)
            {
                log.Error("Enivar Mensaje - Hubo un error");
                return Json(new { me = "Hubo un error" });
            }
        }

        public JsonResult BuscarDatos(QuejasySugerenciasBean quejasySugerencias)
        {
            try
            {
                QuejasySugerenciasBean datosUsuario = quejasySugerenciasFacade.BuscarDatos(quejasySugerencias);
                return Json(new { datosUsuario });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Datos - GET(EXCEPTION):", ex);
                return Json(new { datosUsuario = "Hubo un error al buscar datos" });
            }
        }
    }
}
